@echo off
chcp 65001 > nul
echo ========================================
echo  SPI.AgentServer 空闲超时修复部署脚本
echo ========================================
echo.

REM 检查是否在正确的目录
if not exist "SPI.AgentServer.csproj" (
    echo ❌ 错误：请在项目根目录运行此脚本！
    echo 当前目录：%CD%
    pause
    exit /b 1
)

echo ✅ 项目目录确认：%CD%
echo.

REM 1. 备份现有文件
echo [1/5] 📦 备份现有文件...
set BACKUP_DIR=backup_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set BACKUP_DIR=%BACKUP_DIR: =0%
mkdir "%BACKUP_DIR%" 2>nul

if exist "bin\Release\net8.0\publish\" (
    echo     备份发布目录...
    xcopy "bin\Release\net8.0\publish\" "%BACKUP_DIR%\publish\" /E /I /Q > nul
)

if exist "appsettings.json" (
    echo     备份配置文件...
    copy "appsettings.json" "%BACKUP_DIR%\appsettings.json.bak" > nul
)

echo     ✅ 备份完成：%BACKUP_DIR%
echo.

REM 2. 清理旧的构建
echo [2/5] 🧹 清理旧的构建...
if exist "bin\" rmdir /s /q bin
if exist "obj\" rmdir /s /q obj
echo     ✅ 清理完成
echo.

REM 3. 还原依赖
echo [3/5] 📥 还原 NuGet 包...
dotnet restore
if errorlevel 1 (
    echo ❌ 依赖还原失败！
    pause
    exit /b 1
)
echo     ✅ 依赖还原完成
echo.

REM 4. 编译项目
echo [4/5] 🔨 编译项目...
dotnet build --configuration Release
if errorlevel 1 (
    echo ❌ 编译失败！请检查代码错误。
    pause
    exit /b 1
)
echo     ✅ 编译成功
echo.

REM 5. 运行健康检查
echo [5/5] 🏥 运行编译后检查...
dotnet build --configuration Release --no-restore --no-incremental > nul 2>&1
if errorlevel 1 (
    echo ⚠️  警告：发现潜在问题，但构建成功
) else (
    echo     ✅ 所有检查通过
)
echo.

echo ========================================
echo  ✅ 修复部署完成！
echo ========================================
echo.
echo 📋 部署内容：
echo   - HttpClient 连接保活和重试策略
echo   - SSH 隧道自动健康检查和重连
echo   - 新增健康检查端点
echo   - 完善的故障恢复机制
echo.
echo 🚀 下一步操作：
echo   1. 停止现有服务（如果正在运行）
echo   2. 替换可执行文件：
echo      copy /Y "bin\Release\net8.0\SPI.AgentServer.dll" "部署目录\"
echo   3. 启动服务
echo   4. 访问健康检查：
echo      http://localhost:8215/api/health/detailed
echo.
echo 📝 备份位置：%BACKUP_DIR%
echo 📖 详细文档：FIXES_空闲超时问题解决方案.md
echo.

REM 询问是否立即测试
echo 是否立即启动服务进行测试？
choice /C YN /M "按 Y 启动测试，按 N 退出"
if errorlevel 2 goto :end
if errorlevel 1 goto :test

:test
echo.
echo ========================================
echo  🚀 启动测试服务...
echo ========================================
echo.
echo 服务将在 http://localhost:8215 启动
echo 按 Ctrl+C 停止服务
echo.
timeout /t 3 > nul

dotnet run --configuration Release --no-build

:end
echo.
pause







